// 解决方法很简单，只要在发送完数据后，手动关闭信道，告诉 range 信道已经关闭，无需等待就行。
package main

import (
	"fmt"
	"sync"
	"time"
)

var wwg sync.WaitGroup

func relcv(c chan interface{}) {
	defer wwg.Done()
	for true {
		time.Sleep(time.Second)
		ret := <-c
		if ret == "exit" {
			close(c)
			break
		}
		fmt.Println("接收成功", ret)
	}

}

func send(c chan interface{}) {
	defer wwg.Done()
	for i := 0; i < 10; i++ {
		c <- i
	}
	c <- "exit"

	// time.Sleep(time.Second*10) // 写的协程结束，导致死锁

}
func main() {
	ch := make(chan interface{})
	wwg.Add(2)
	go relcv(ch) // 启用goroutine从通道接收值
	go send(ch)  // 启用goroutine从通道接收值

	wwg.Wait()
	fmt.Println("end")

}
